diff --git a/system/database/drivers/pdo/pdo_driver.php b/system/database/drivers/pdo/pdo_driver.php
index 727f097..658a3d5 100644
--- a/system/database/drivers/pdo/pdo_driver.php
+++ b/system/database/drivers/pdo/pdo_driver.php
@@ -42,31 +42,28 @@
  */
 class CI_DB_pdo_driver extends CI_DB {
 
-	public $dbdriver = 'pdo';
+	var $dbdriver = 'pdo';
 
 	// the character used to excape - not necessary for PDO
-	protected $_escape_char = '';
+	var $_escape_char = '';
 
 	// clause and character used for LIKE escape sequences
-	protected $_like_escape_str;
-	protected $_like_escape_chr;
+	var $_like_escape_str;
+	var $_like_escape_chr;
 
 	/**
 	 * The syntax to count rows is slightly different across different
 	 * database engines, so this string appears in each driver and is
-	 * used for the count_all() and count_all_results() public functions.
+	 * used for the count_all() and count_all_results() functions.
 	 */
-	protected $_count_string = "SELECT COUNT(*) AS ";
-	protected $_random_keyword;
+	var $_count_string = "SELECT COUNT(*) AS ";
+	var $_random_keyword;
 
 	// need to track the pdo driver and options
-	protected $pdodriver;
-	protected $options = array();
+	var $pdodriver;
+	var $options = array();
 
-	/**
-	 * Pre-connection setup
-	 */
-	public function __construct($params)
+	function __construct($params)
 	{
 		parent::__construct($params);
 
@@ -107,10 +104,11 @@
 	/**
 	 * Connection String
 	 *
+	 * @access	private
 	 * @param	array
 	 * @return	void
 	 */
-	protected function _connect_string($params)
+	function _connect_string($params)
 	{
 		if (strpos($this->hostname, ':'))
 		{
@@ -192,9 +190,10 @@
 	/**
 	 * Non-persistent database connection
 	 *
+	 * @access	private called by the base class
 	 * @return	resource
 	 */
-	protected function db_connect()
+	function db_connect()
 	{
 		$this->options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_SILENT;
 
@@ -206,9 +205,10 @@
 	/**
 	 * Persistent database connection
 	 *
+	 * @access	private called by the base class
 	 * @return	resource
 	 */
-	protected function db_pconnect()
+	function db_pconnect()
 	{
 		$this->options[PDO::ATTR_ERRMODE]    = PDO::ERRMODE_SILENT;
 		$this->options[PDO::ATTR_PERSISTENT] = TRUE;
@@ -221,9 +221,10 @@
 	/**
 	 * PDO connection
 	 *
+	 * @access	private called by the PDO driver class
 	 * @return	resource
 	 */
-	protected function pdo_connect()
+	function pdo_connect()
 	{
 		// Refer : http://php.net/manual/en/ref.pdo-mysql.connection.php
 		if ($this->pdodriver == 'mysql' && is_php('5.3.6'))
@@ -257,9 +258,10 @@
 	 * Keep / reestablish the db connection if no queries have been
 	 * sent for a length of time exceeding the server's idle timeout
 	 *
+	 * @access	public
 	 * @return	void
 	 */
-	public function reconnect()
+	function reconnect()
 	{
 		if ($this->db->db_debug)
 		{
@@ -274,9 +276,10 @@
 	/**
 	 * Select the database
 	 *
+	 * @access	private called by the base class
 	 * @return	resource
 	 */
-	protected function db_select()
+	function db_select()
 	{
 		// Not needed for PDO
 		return TRUE;
@@ -301,10 +304,11 @@
 	/**
 	 * Execute the query
 	 *
+	 * @access	private called by the base class
 	 * @param	string	an SQL query
 	 * @return	object
 	 */
-	protected function _execute($sql)
+	function _execute($sql)
 	{
 		$sql = $this->_prep_query($sql);
 
@@ -329,10 +333,11 @@
 	 *
 	 * If needed, each database adapter can prep the query string
 	 *
+	 * @access	private called by execute()
 	 * @param	string	an SQL query
 	 * @return	string
 	 */
-	protected function _prep_query($sql)
+	function _prep_query($sql)
 	{
 		if ($this->pdodriver === 'pgsql')
 		{
@@ -342,7 +347,7 @@
 		elseif ($this->pdodriver === 'sqlite')
 		{
 			// Change the backtick(s) for SQLite
-			$sql = str_replace('`', '"', $sql);
+			$sql = str_replace('`', '', $sql);
 		}
 
 		return $sql;
@@ -353,9 +358,10 @@
 	/**
 	 * Begin Transaction
 	 *
+	 * @access	public
 	 * @return	bool
 	 */
-	public function trans_begin($test_mode = FALSE)
+	function trans_begin($test_mode = FALSE)
 	{
 		if ( ! $this->trans_enabled)
 		{
@@ -381,9 +387,10 @@
 	/**
 	 * Commit Transaction
 	 *
+	 * @access	public
 	 * @return	bool
 	 */
-	public function trans_commit()
+	function trans_commit()
 	{
 		if ( ! $this->trans_enabled)
 		{
@@ -406,9 +413,10 @@
 	/**
 	 * Rollback Transaction
 	 *
+	 * @access	public
 	 * @return	bool
 	 */
-	public function trans_rollback()
+	function trans_rollback()
 	{
 		if ( ! $this->trans_enabled)
 		{
@@ -431,11 +439,12 @@
 	/**
 	 * Escape String
 	 *
+	 * @access	public
 	 * @param	string
 	 * @param	bool	whether or not the string will be used in a LIKE condition
 	 * @return	string
 	 */
-	public function escape_str($str, $like = FALSE)
+	function escape_str($str, $like = FALSE)
 	{
 		if (is_array($str))
 		{
@@ -474,9 +483,10 @@
 	/**
 	 * Affected Rows
 	 *
+	 * @access	public
 	 * @return	integer
 	 */
-	public function affected_rows()
+	function affected_rows()
 	{
 		return $this->affect_rows;
 	}
@@ -508,10 +518,11 @@
 	 * Generates a platform-specific query string that counts all records in
 	 * the specified database
 	 *
+	 * @access	public
 	 * @param	string
 	 * @return	string
 	 */
-	public function count_all($table = '')
+	function count_all($table = '')
 	{
 		if ($table == '')
 		{
@@ -539,19 +550,20 @@
 	 *
 	 * Generates a platform-specific query string so that the table names can be fetched
 	 *
+	 * @access	private
 	 * @param	boolean
 	 * @return	string
 	 */
-	protected function _list_tables($prefix_limit = FALSE)
+	function _list_tables($prefix_limit = FALSE)
 	{
 		if ($this->pdodriver == 'pgsql')
 		{
-			// Analog public function to show all tables in postgre
+			// Analog function to show all tables in postgre
 			$sql = "SELECT * FROM information_schema.tables WHERE table_schema = 'public'";
 		}
 		elseif ($this->pdodriver == 'sqlite')
 		{
-			// Analog public function to show all tables in sqlite
+			// Analog function to show all tables in sqlite
 			$sql = "SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%'";
 		}
 		else
@@ -574,10 +586,11 @@
 	 *
 	 * Generates a platform-specific query string so that the column names can be fetched
 	 *
+	 * @access	public
 	 * @param	string	the table name
 	 * @return	string
 	 */
-	public function _list_columns($table = '')
+	function _list_columns($table = '')
 	{
 		return 'SHOW COLUMNS FROM '.$this->_from_tables($table);
 	}
@@ -589,24 +602,25 @@
 	 *
 	 * Generates a platform-specific query so that the column data can be retrieved
 	 *
+	 * @access	public
 	 * @param	string	the table name
 	 * @return	object
 	 */
-	public function _field_data($table)
+	function _field_data($table)
 	{
 		if ($this->pdodriver == 'mysql' or $this->pdodriver == 'pgsql')
 		{
-			// Analog public function for mysql and postgre
+			// Analog function for mysql and postgre
 			return 'SELECT * FROM '.$this->_from_tables($table).' LIMIT 1';
 		}
 		elseif ($this->pdodriver == 'oci')
 		{
-			// Analog public function for oci
+			// Analog function for oci
 			return 'SELECT * FROM '.$this->_from_tables($table).' WHERE ROWNUM <= 1';
 		}
 		elseif ($this->pdodriver == 'sqlite')
 		{
-			// Analog public function for sqlite
+			// Analog function for sqlite
 			return 'PRAGMA table_info('.$this->_from_tables($table).')';
 		}
 		
@@ -647,12 +661,13 @@
 	/**
 	 * Escape the SQL Identifiers
 	 *
-	 * This public function escapes column and table names
+	 * This function escapes column and table names
 	 *
+	 * @access	private
 	 * @param	string
 	 * @return	string
 	 */
-	protected function _escape_identifiers($item)
+	function _escape_identifiers($item)
 	{
 		if ($this->_escape_char == '')
 		{
@@ -689,13 +704,14 @@
 	/**
 	 * From Tables
 	 *
-	 * This public function implicitly groups FROM tables so there is no confusion
+	 * This function implicitly groups FROM tables so there is no confusion
 	 * about operator precedence in harmony with SQL standards
 	 *
+	 * @access	public
 	 * @param	type
 	 * @return	type
 	 */
-	public function _from_tables($tables)
+	function _from_tables($tables)
 	{
 		if ( ! is_array($tables))
 		{
@@ -712,12 +728,13 @@
 	 *
 	 * Generates a platform-specific insert string from the supplied data
 	 *
+	 * @access	public
 	 * @param	string	the table name
 	 * @param	array	the insert keys
 	 * @param	array	the insert values
 	 * @return	string
 	 */
-	public function _insert($table, $keys, $values)
+	function _insert($table, $keys, $values)
 	{
 		return 'INSERT INTO '.$this->_from_tables($table).' ('.implode(', ', $keys).') VALUES ('.implode(', ', $values).')';
 	}
@@ -729,12 +746,13 @@
 	 *
 	 * Generates a platform-specific insert string from the supplied data
 	 *
+	 * @access  public
 	 * @param   string  the table name
 	 * @param   array   the insert keys
 	 * @param   array   the insert values
 	 * @return  string
 	 */
-	public function _insert_batch($table, $keys, $values)
+	function _insert_batch($table, $keys, $values)
 	{
 		return 'INSERT INTO '.$this->_from_tables($table).' ('.implode(', ', $keys).') VALUES '.implode(', ', $values);
 	}
@@ -746,6 +764,7 @@
 	 *
 	 * Generates a platform-specific update string from the supplied data
 	 *
+	 * @access	public
 	 * @param	string	the table name
 	 * @param	array	the update data
 	 * @param	array	the where clause
@@ -753,7 +772,7 @@
 	 * @param	array	the limit clause
 	 * @return	string
 	 */
-	public function _update($table, $values, $where, $orderby = array(), $limit = FALSE)
+	function _update($table, $values, $where, $orderby = array(), $limit = FALSE)
 	{
 		foreach ($values as $key => $val)
 		{
@@ -777,12 +796,13 @@
 	 *
 	 * Generates a platform-specific batch update string from the supplied data
 	 *
+	 * @access	public
 	 * @param	string	the table name
 	 * @param	array	the update data
 	 * @param	array	the where clause
 	 * @return	string
 	 */
-	public function _update_batch($table, $values, $index, $where = NULL)
+	function _update_batch($table, $values, $index, $where = NULL)
 	{
 		$ids   = array();
 		$where = ($where != '' && count($where) >=1) ? implode(" ", $where).' AND ' : '';
@@ -829,12 +849,13 @@
 	 *
 	 * Generates a platform-specific truncate string from the supplied data
 	 * If the database does not support the truncate() command
-	 * This public function maps to "DELETE FROM table"
+	 * This function maps to "DELETE FROM table"
 	 *
+	 * @access	public
 	 * @param	string	the table name
 	 * @return	string
 	 */
-	public function _truncate($table)
+	function _truncate($table)
 	{
 		return $this->_delete($table);
 	}
@@ -846,12 +867,13 @@
 	 *
 	 * Generates a platform-specific delete string from the supplied data
 	 *
+	 * @access	public
 	 * @param	string	the table name
 	 * @param	array	the where clause
 	 * @param	string	the limit clause
 	 * @return	string
 	 */
-	public function _delete($table, $where = array(), $like = array(), $limit = FALSE)
+	function _delete($table, $where = array(), $like = array(), $limit = FALSE)
 	{
 		$conditions = '';
 
@@ -880,12 +902,13 @@
 	 *
 	 * Generates a platform-specific LIMIT clause
 	 *
+	 * @access	public
 	 * @param	string	the sql query string
 	 * @param	integer	the number of rows to limit the query to
 	 * @param	integer	the offset value
 	 * @return	string
 	 */
-	public function _limit($sql, $limit, $offset)
+	function _limit($sql, $limit, $offset)
 	{
 		if ($this->pdodriver == 'cubrid' OR $this->pdodriver == 'sqlite')
 		{
@@ -907,10 +930,11 @@
 	/**
 	 * Close DB Connection
 	 *
+	 * @access	public
 	 * @param	resource
 	 * @return	void
 	 */
-	public function _close($conn_id)
+	function _close($conn_id)
 	{
 		$this->conn_id = null;
 	}
@@ -918,4 +942,4 @@
 }
 
 /* End of file pdo_driver.php */
-/* Location: ./system/database/drivers/pdo/pdo_driver.php */
\ No newline at end of file
+/* Location: ./system/database/drivers/pdo/pdo_driver.php */
diff --git a/system/database/drivers/pdo/pdo_result.php b/system/database/drivers/pdo/pdo_result.php
index 330a2e6..384b753 100644
--- a/system/database/drivers/pdo/pdo_result.php
+++ b/system/database/drivers/pdo/pdo_result.php
@@ -51,9 +51,10 @@
 	/**
 	 * Number of rows in the result set
 	 *
+	 * @access	public
 	 * @return	integer
 	 */
-	public function num_rows()
+	function num_rows()
 	{
 		if (empty($this->result_id) OR ! is_object($this->result_id))
 		{
@@ -73,9 +74,10 @@
 	/**
 	 * Fetch the result handler
 	 *
+	 * @access	public
 	 * @return	mixed
 	 */
-	public function result_assoc()
+	function result_assoc()
 	{
 		// If the result already fetched before, use that one
 		if (count($this->result_array) > 0 OR $this->is_fetched)
@@ -114,9 +116,10 @@
 	/**
 	 * Number of fields in the result set
 	 *
+	 * @access	public
 	 * @return	integer
 	 */
-	public function num_fields()
+	function num_fields()
 	{
 		return $this->result_id->columnCount();
 	}
@@ -128,9 +131,10 @@
 	 *
 	 * Generates an array of column names
 	 *
+	 * @access	public
 	 * @return	array
 	 */
-	public function list_fields()
+	function list_fields()
 	{
 		if ($this->db->db_debug)
 		{
@@ -147,9 +151,10 @@
 	 *
 	 * Generates an array of objects containing field meta-data
 	 *
+	 * @access	public
 	 * @return	array
 	 */
-	public function field_data()
+	function field_data()
 	{
 		$data = array();
 	
@@ -219,7 +224,7 @@
 	 *
 	 * @return	null
 	 */
-	public function free_result()
+	function free_result()
 	{
 		if (is_object($this->result_id))
 		{
@@ -236,9 +241,10 @@
 	 * this internally before fetching results to make sure the
 	 * result set starts at zero
 	 *
+	 * @access	private
 	 * @return	array
 	 */
-	protected function _data_seek($n = 0)
+	function _data_seek($n = 0)
 	{
 		return FALSE;
 	}
@@ -250,9 +256,10 @@
 	 *
 	 * Returns the result set as an array
 	 *
+	 * @access	private
 	 * @return	array
 	 */
-	protected function _fetch_assoc()
+	function _fetch_assoc()
 	{
 		return $this->result_id->fetch(PDO::FETCH_ASSOC);
 	}
@@ -267,7 +274,7 @@
 	 * @access	private
 	 * @return	object
 	 */
-	protected function _fetch_object()
+	function _fetch_object()
 	{	
 		return $this->result_id->fetchObject();
 	}
diff --git a/system/database/drivers/pdo/pdo_utility.php b/system/database/drivers/pdo/pdo_utility.php
index 2c12d74..c278c51 100644
--- a/system/database/drivers/pdo/pdo_utility.php
+++ b/system/database/drivers/pdo/pdo_utility.php
@@ -39,9 +39,10 @@
 	/**
 	 * List databases
 	 *
+	 * @access	private
 	 * @return	bool
 	 */
-	protected function _list_databases()
+	function _list_databases()
 	{
 		// Not sure if PDO lets you list all databases...
 		if ($this->db->db_debug)
@@ -58,10 +59,11 @@
 	 *
 	 * Generates a platform-specific query so that a table can be optimized
 	 *
+	 * @access	private
 	 * @param	string	the table name
 	 * @return	object
 	 */
-	protected function _optimize_table($table)
+	function _optimize_table($table)
 	{
 		// Not a supported PDO feature
 		if ($this->db->db_debug)
@@ -78,10 +80,11 @@
 	 *
 	 * Generates a platform-specific query so that a table can be repaired
 	 *
+	 * @access	private
 	 * @param	string	the table name
 	 * @return	object
 	 */
-	protected function _repair_table($table)
+	function _repair_table($table)
 	{
 		// Not a supported PDO feature
 		if ($this->db->db_debug)
@@ -96,10 +99,11 @@
 	/**
 	 * PDO Export
 	 *
+	 * @access	private
 	 * @param	array	Preferences
 	 * @return	mixed
 	 */
-	protected function _backup($params = array())
+	function _backup($params = array())
 	{
 		// Currently unsupported
 		return $this->db->display_error('db_unsuported_feature');
